/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var levelOrder = function (root) {
  //空树判断
  if (!root) return []

  //定义数组result
  let result = []
  //定义队列queue：初始化存储第一层的节点
  let queue = [root]
  /* 当队列非空：
     1. 依次取出当前层的所有节点，将节点值存入数组tempArr。
     2. 如果该节点还有左、右孩子，将左、右孩子存入队列queue。*/
  while (queue.length > 0) {
    //定义数组tempArr：记录当前层的节点值
    let tempArr = []
    //定义变量len：记录当前层的节点数量（shift导致数组长度动态变化，所以要提前记录）
    let len = queue.length
    for (let i = 0; i < len; i++) {
      let treeNode = queue.shift()
      tempArr.push(treeNode.val)
      if (treeNode.left) queue.push(treeNode.left)
      if (treeNode.right) queue.push(treeNode.right)
    }
    result.push(tempArr)
  }
  //返回结果数组result
  return result
};